package com.qinggeng.project.system.mapper;

import com.qinggeng.project.api.dto.GoodsDto;
import com.qinggeng.project.api.dto.GoodsInfoDto;
import com.qinggeng.project.system.domain.Goods;
import com.qinggeng.project.system.domain.GoodsMark;
import com.qinggeng.project.system.domain.vo.GoodsKeyWordsVO;
import com.qinggeng.project.system.dto.GoodsKeyWordDTO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;

/**
 * 商品信息Mapper接口
 *
 * @author qinggeng
 * @date 2020-06-15
 */
public interface GoodsMapper
{
    /**
     * 查询商品信息
     *
     * @param goodsId 商品信息ID
     * @return 商品信息
     */
    public Goods selectGoodsById(Long goodsId);

    /**
     * 查询商品信息列表
     *
     * @param goods 商品信息
     * @return 商品信息集合
     */
    public List<Goods> selectGoodsList(Goods goods);

    /**
     * 查询商品信息列表
     *
     * @param goods 商品信息
     * @return 商品信息集合
     */
    public List<Goods> systemSelectGoodsListForOne(Goods goods);


    /**
     * 查询商品信息列表根据一级分类
     * @param goods
     * @return
     */
    public List<Goods> selectGoodsListForOne(Goods goods);

    /**
     * 查询库存小于30商品信息列表根据一级分类
     * @param goods
     * @return
     */
    public List<Goods> selectLittleGoodsListForOne(Goods goods);

    /**
     * 新增商品信息
     *
     * @param goods 商品信息
     * @return 结果
     */
    public int insertGoods(Goods goods);

    /**
     * 修改商品信息
     *
     * @param goods 商品信息
     * @return 结果
     */
    public int updateGoods(Goods goods);

    /**
     * 删除商品信息
     *
     * @param goodsId 商品信息ID
     * @return 结果
     */
    public int deleteGoodsById(Long goodsId);

    /**
     * 批量删除商品信息
     *
     * @param goodsIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteGoodsByIds(Long[] goodsIds);


    /**
     * 商品列表
     * @param goods 商品信息
     * @return 商品信息集合
     */
    List<GoodsDto> selectGoodsListDto(Goods goods);

    /**
     * 商品列表
     * @param goods 商品信息
     * @return 商品信息集合
     */
    List<GoodsDto> selectGoodsListDto1(Goods goods);

    /**
     * 商品详情
     * @param goodsId 商品ID
     * @param shopId 商户ID
     * @return 商品信息
     */
    GoodsInfoDto selectGoodsDtoById(@Param("goodsId") Long goodsId,@Param("shopId") Long shopId);

    int logicalDeleteGoodsByIds(Long[] goodsIds);

    /**
     * 一级分类商品列表
     * @param goods
     * @return
     */
    List<GoodsDto> selectGoodsListDtoforOne(Goods goods);


    /**
     * 查询最大主类Id
     * @return
     */
    Long selectMaxGoodsId();

    /**
     * @param goods
     * @return
     */
    List<GoodsDto> selectGoodsSkuList(Goods goods);

    GoodsMark selectGoodsMarkById(@Param("id")String id);

    Goods selectGoodsByIdYg(Long goodsId);

    @Select("select limit_num from goods where goods_id=#{goodsId}")
    Integer getGoodsLimitNum(Long goodsId);

    List<Goods> selectBeatGoodsList(Goods goods);

    List<GoodsKeyWordsVO> selectKeyWord(GoodsKeyWordDTO dto);

    int updateGoodsPercentage(@Param("goodsId")Long goodsId,@Param("percentage")BigDecimal percentage);

    int relieve(Long goodsId);

    int establish(@Param("goodsId")Long goodsId,@Param("wholeGoodsId")Long wholeGoodsId);


    List<Goods> selectGoodsListDtoForOneByGoodsIds( String[] goodsIds);
}
